//
//  GLShader.h
//  LMPhotoVideoSDK
//
//  Created by Aimar on 16/7/6.
//  Copyright © 2016年 魁钺会. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "OpenGLCoreDefine.h"

/**
 *  着色器
 */
@interface GLShader : NSObject

/**
 *  着色器id
 */
@property (nonatomic, assign, readonly)GLuint       programId;


/**
 *  初始化
 *
 *  @param vString 顶点shader
 *  @param fString 段shader
 *
 *  @return GLShader对象
 */
- (id)initWithVertexString:(const GLchar*)vString
            fragmentString:(const GLchar*)fString;

/**
 *  初始化(bundle文件)
 *
 *  @param vFile 顶点shader文件名
 *  @param fFile 段shader文件名
 *
 *  @return GLShader对象
 */
- (id)initWithVertexFile:(NSString*)vFile
            fragmentFile:(NSString*)fFile;

/**
 *  绑定为当前shader
 *
 *  @return 是否绑定成功
 */
- (BOOL)bind;

/**
 *  释放着色器
 */
- (void)releaseShader;

/**
 *  用于回调shader完成创建后绑定顶点、纹理坐标等操作，子类可以复写此方法
 *
 *  @return 是否成功
 */
- (BOOL)onProgramCreate;

/**
 *  用于回调绑定shader后的操作，子类可以复写此方法
 */
- (void)onProgramBind;

/**
 *  指定投影矩阵
 *
 *  @param projection 4x4矩阵
 */
- (void)setProjectionMatrix:(mat4)projection;

/**
 *  指定模型视图矩阵
 *
 *  @param model 4x4矩阵
 */
- (void)setModelViewMatrix:(mat4)model;

/**
 *  顶点坐标
 *
 *  @param position  顶点数组
 *  @param component 位置分量个数（2或者3)
 */
- (void)setPosition:(GLfloat *)position component:(GLint)component;

@end
